package middleware

import (
	"ginBolg/models/ctype"
	"ginBolg/models/res"
	"ginBolg/service/redis_ser"
	"ginBolg/utils/jwt"
	"github.com/gin-gonic/gin"
)

func JwtAuth() gin.HandlerFunc {
	return func(c *gin.Context) {
		token := c.Request.Header.Get("token")
		if token == "" {
			res.Fail("请重新登录", c)
			c.Abort() // 拦截
			return
		}
		claims, err := jwt.ParseToken(token)
		if err != nil {
			res.Fail("token 解析错误", c)
			c.Abort() // 拦截
			return
		}
		// 判断 token 是否在redis中
		if redis_ser.CheckLogout(token) {
			res.Fail("token已失效", c)
			c.Abort()
			return
		}

		// 登录的用户
		c.Set("claims", claims)
	}
}

func JwtAdmin() gin.HandlerFunc {
	return func(c *gin.Context) {
		token := c.Request.Header.Get("token")
		if token == "" {
			res.Fail("请重新登录", c)
			c.Abort() // 拦截
			return
		}
		claims, err := jwt.ParseToken(token)
		if err != nil {
			res.Fail("token 解析错误", c)
			c.Abort() // 拦截
			return
		}
		// 登录的用户
		if claims.Role != int(ctype.PermissionAdmin) {
			res.Fail("权限不足", c)
			c.Abort()
			return
		}
		// 判断 token 是否在redis中
		if redis_ser.CheckLogout(token) {
			res.Fail("token已失效", c)
			c.Abort()
			return
		}

		c.Set("claims", claims)
	}
}
